'''
切片：
    1.切片是一种从序列中获取子序列的方法。
        适用于：字符串、列表、元组
    2.切片的语法：[start:end:step]
        从开始到结束但不包含结束位置
    3.start:切片的起始位置，默认为0。
    4.end:切片的结束位置，默认为序列的长度。
    5.step:切片的步长，默认为1。
    6.可以从左往右切，也可以从右往左切。
        步长可以是正数，也可以是负数。
        步长为正数时，从左往右。
        步长为负数时，从右往左。
'''
#1.字符串切片
#1.1从左往右切，步长为正数
s1="helloworld" # 定义一个字符串，里面包含了"helloworld"
s=s1[0:5:1] # 切片，从0到5，不包含5，步长为1，输出的是"hello"
print(s) # 输出从0到5的子序列，不包含5，输出的是"hello"
#1.2从右往左切，步长为负数
ss=s1[4:0:-1] # 切片，从5到0，不包含0，步长为-1，输出的是"olleh"，从右往左切，步长为负数。
print(ss) # 输出从4到0的子序列，不包含0，输出的是"olle"，从右往左切，步长为负数。

ss1=s1[4::-1]# 切片，从4到0，包含0，步长为-1，输出的是"olleh"，从右往左切，步长为负数。
print(ss1) # 输出从4到0的子序列，包含0，输出的是"olleh"，从右往左切，步长为负数。

#1.3如果希望从最右边开始切，就切3个字符
#从倒数第1个字符开始切到倒数第四个字符来说结束
ss2=s1[-1:-4:-1] # 切片，从-1到-4，不包含-4，步长为-1，输出的是"rld"，从右往左切，步长为负数。
print(ss2) # 输出从-1到-4的子序列，不包含-4，输出的是"rld"，从右往左切，步长为负数。

#2.列表切片
lst=[10,20,30,40,50,60,70,80,90] # 定义一个列表，里面包含了10到90的数字，列表的名称是lst
lst1=lst[1:6:1] # 切片，从1到6，不包含6，步长为1，输出的是[20,30,40,50,60]，从左往右切，步长为正数。
print(lst) # 输出从1到6的子序列，不包含6，输出的是[20,30,40,50,60]，从左往右切，步长为正数。
#倒着切，从右往左切，步长为负数。
lst2=lst[4:1:-1] # 切片，从4到1，不包含1，步长为-1，输出的是[50,40,30,20]，从右往左切，步长为负数。
#从左往右切，去前边的3个元素
lst3=lst[0:3:1] # 切片，从0到3，不包含3，步长为1，输出的是[10,20,30]，从左往右切，步长为正数。
 
#从右往左切，取后边的3个元素
lst4=lst[-1:-4:-1] # 切片，从-3到最后，不包含最后，步长为1，输出的是[70,80,90]，从右往左切，步长为负数。print(lst1) 
print(lst4)

#3.元组切片
t1=(10,20,30,40,50,60,70,80,90) # 定义一个元组，里面包含了10到90的数字，元组的名称是t1
print(t1) # 输出元组，类型是tuple
#从左往右切取所有元素：：如果步长是1，那么默认起始位是第一个元素，结束位是最后一个元素。
t2=t1[::] # 切片，从0到9，不包含9，步长为1，输出的是(10,20,30,40,50,60,70,80,90)，从左往右切，步长为正数。
print(t2) # 输出从0到9的子序列，不包含9，输出的是(10,20,30,40,50,60,70,80,90)，从左往右切，步长为正数。

#从右往左切取所有元素：：如果步长是-1，那么默认起始位是最后一个元素，结束位是第一个元素。
t3=t1[::-1] # 切片，从9到0，不包含0，步长为-1，输出的是(90,80,70,60,50,40,30,20,10)，从右往左切，步长为负数。
print(t3) # 输出从9到0的子序列，不包含0，输出的是(90,80,70,60,50,40,30,20,10)，从右往左切，步长为负数。


#4.切片来反转字符串
s1="helloworld" # 定义一个字符串，里面包含了"helloworld"，字符串的名称是s1
s1=s1[::-1] # 切片，从9到0，不包含0，步长为-1，输出的是"dlrowolleh"，从右往左切，步长为负数。
print(s1) # 输出从9到0的子序列，不包含0，输出的是"dlrowolleh"，从右往左切，步长为负数。